package com.xoa.service.workflow.flowtype;

import com.xoa.model.users.Users;
import com.xoa.model.workflow.FlowDetailInfo;
import com.xoa.model.workflow.FlowTypeModel;
import com.xoa.service.workflow.wrapper.JobSelectorWrapper;
import com.xoa.util.AjaxJson;
import com.xoa.util.ToJson;
import com.xoa.util.common.wrapper.BaseWrapper;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 创建作者:   张勇
 * 创建日期:   2017/5/8 16:39
 * 类介绍  :   流程设置
 * 构造参数:
 */
public interface FlowTypeService {

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/8 16:42
     * 方法介绍:   新建流程
     * 参数说明:   需传递对象参数
     *
     * @return
     */
    public ToJson<FlowTypeModel> saveFlow(FlowTypeModel flowTypeModel);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/23 17:30
     * 方法介绍:   自定义属性所有查询，根据flowId
     * 参数说明:
     *
     * @return
     */
    public ToJson<FlowTypeModel> selectAllFlow(Integer flowId);

    public ToJson<FlowTypeModel> selectAllFlow(Integer flowId, HttpServletRequest request);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/23 19:35
     * 方法介绍:   自定义属性根据flowId修改
     * 参数说明:
     *
     * @return
     */
    public ToJson<FlowTypeModel> updateFlow(FlowTypeModel flowTypeModel);


    public ToJson<FlowTypeModel> quertBySortId(Integer flowId, HttpServletRequest request);

    ToJson<FlowTypeModel> flowBySearch(String searchValue, Integer flowId);

    ToJson<FlowTypeModel> selectFlowAuthOrSearch(HttpServletRequest request, String searchValue, Integer sortId);

    /**
     * 创建作者:   韩东堂
     * 创建日期:   2017/6/11 16:35
     * 方法介绍:  根据flowId 获取详细信息
     * 参数说明:
     *
     * @return
     */
    ToJson<FlowDetailInfo> selectFlowDetailInfo(Integer flowId);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/22 10:55
     * 方法介绍:   根据flowId和formId查询一条数据
     * 参数说明:
     *
     * @return
     */
    public FlowTypeModel selectOnlyType(Integer flowId, Integer formId);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/7/7 10:46
     * 方法介绍:   查询说明和附件
     * 参数说明:
     *
     * @return
     */
    public ToJson<FlowTypeModel> selectAttachmentAndInstructions(Integer flowId, Integer formId, String sqlType);

    /**
     * 创建作者:
     * 创建日期:   2017/7/14 10:33
     * 方法介绍:   根据runid查询flowType
     * 参数说明:
     *
     * @return
     */
    public FlowTypeModel sfTbyrunId(Integer runId);

    BaseWrapper getFlowOutModel(Integer flowId) throws Exception;

    BaseWrapper intputFlowFile(Integer flowId, MultipartFile file);

    BaseWrapper deleteFlow(Integer flowId);

    BaseWrapper clearFlow(Integer flowId);

    /**
     * 创建作者:   牛江丽
     * 创建日期:   2018/1/26 10:47
     * 方法介绍:   查询所有设计流程
     * 参数说明:
     *
     * @return
     */
    public ToJson<FlowTypeModel> selAllType();

    public JobSelectorWrapper selOneToAllType(HttpServletRequest request);

    public JobSelectorWrapper searchAllType(HttpServletRequest request);

    public AjaxJson selByFlowSort(Integer sortId);

    public AjaxJson selFlowSorByAndroid( Map<String, Object> param);

    public JobSelectorWrapper selectFrom(HttpServletRequest request);

    public ToJson<FlowTypeModel>  flowAuthOrSearchCommonWork(HttpServletRequest request);
    //流程克隆
    public ToJson flowClone(HttpServletRequest request);
    //获取当前流程的说明文档附件信息
    public ToJson getAttachment(HttpServletRequest request);
    //按照年份查询数据（流程门户显示）
    public ToJson<FlowTypeModel> flowData(HttpServletRequest request,Integer flag);
    //查询流程设计中的查询配置
    public ToJson<FlowTypeModel> flowTypequeryList(Integer flowId);
    //设置流程设计中的查询配置
    public ToJson updateQueryList(FlowTypeModel flowTypeModel);

    //根据flowID串查询flowName串
    String getFlowNames(java.lang.String ids);

    //根据flowId串查询flowRun集合
    List<FlowDetailInfo> getFlowTypeModelList(String ids,String flowName,String flowSort);

    AjaxJson checkWFNewPriv(Users user, Integer flowId);

}


